package com.yupi.springbootinit.utils;

/**
 * @Author FengHuan Wang
 * @Date 2025/2/7 20:05
 * @Version 1.0
 */

import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * 提取AI响应内容工具类
 */
public class AliResponseUtils {

    /**
     * 提取两个标记之间的内容
     *
     * @param content 原始内容
     * @param startMarker 开始标记
     * @param endMarker 结束标记
     * @return 提取的内容
     */
    private static String extractBetweenMarkers(String content, String startMarker, String endMarker) {
        int startIndex = content.indexOf(startMarker);
        if (startIndex == -1) {
            // 如果未找到开始标记，返回空字符串
            return "";
        }
        // 跳过开始标记
        startIndex += startMarker.length();

        int endIndex = content.indexOf(endMarker, startIndex);
        if (endIndex == -1) {
            // 如果未找到结束标记，返回空字符串
            return "";
        }
        // 返回标记之间的内容并去除前后空格
        return content.substring(startIndex, endIndex).trim();
    }
    public static List<String> format(String jsonStr) {
        // 解析JSON字符串
        JSONObject jsonObject = JSONUtil.parseObj(jsonStr);

        // 提取content字段
        String content = jsonObject.getJSONObject("output")
                .getJSONArray("choices")
                .getJSONObject(0)
                .getJSONObject("message")
                .getStr("content");

        // 提取 ```javascript ``` 之间的内容
        String javascriptContent = extractBetweenMarkers(content, "```javascript", "```");

        // 提取 <<<<< 之间的内容
        String textContent = extractBetweenMarkers(content, "<<<<<", "<<<<<");

        //定义一个结果集合，将数组返回出去
        List<String> result = new ArrayList<>();
        result.add(javascriptContent);
        result.add(textContent);
        // 输出提取的内容
        return result;
    }
}
